package config

import (
	"log"
	"os"
	"path/filepath"

	"github.com/spf13/viper"
)

var ViperConfig *viper.Viper

// InitConfig 初始化配置
func InitConfig() error {
	ViperConfig = viper.New()

	// 设置配置文件路径
	configPath := "config"
	configName := "config"
	configType := "yaml"

	// 检查配置文件是否存在
	configFile := filepath.Join(configPath, configName+"."+configType)
	if _, err := os.Stat(configFile); os.IsNotExist(err) {
		log.Printf("Config file not found: %s", configFile)
		return err
	}

	ViperConfig.SetConfigName(configName)
	ViperConfig.SetConfigType(configType)
	ViperConfig.AddConfigPath(configPath)

	// 读取配置文件
	if err := ViperConfig.ReadInConfig(); err != nil {
		log.Printf("Error reading config file: %v", err)
		return err
	}

	log.Println("Configuration loaded successfully")
	return nil
}

// GetStoragePath 获取存储路径
func GetStoragePath() string {
	return ViperConfig.GetString("storage.local.path")
}

// GetUploadMaxSize 获取上传文件最大大小
func GetUploadMaxSize() int64 {
	return ViperConfig.GetInt64("upload.max_size") * 1024 * 1024 // 转换为字节
}

// GetAllowedFileTypes 获取允许的文件类型
func GetAllowedFileTypes() []string {
	return ViperConfig.GetStringSlice("upload.allowed_types")
}

// GetAuthEnabled 获取是否启用认证
func GetAuthEnabled() bool {
	return ViperConfig.GetBool("auth.enabled")
}

// GetAuthUsername 获取管理员用户名
func GetAuthUsername() string {
	return ViperConfig.GetString("auth.username")
}

// GetAuthPassword 获取管理员密码
func GetAuthPassword() string {
	return ViperConfig.GetString("auth.password")
}

// GetJWTSecret 获取JWT密钥
func GetJWTSecret() string {
	return ViperConfig.GetString("auth.jwt_secret")
}

// GetJWTExpiry 获取JWT过期时间（小时）
func GetJWTExpiry() int {
	return ViperConfig.GetInt("auth.jwt_expiry")
}

// GetContentPath 获取应用程序上下文路径
func GetContentPath() string {
	path := ViperConfig.GetString("server.content-path")
	if path == "" {
		return "/"
	}
	return path
}

// GetBruteForceProtectionEnabled 获取是否启用防爆破保护
func GetBruteForceProtectionEnabled() bool {
	return ViperConfig.GetBool("auth.brute_force_protection.enabled")
}

// GetMaxLoginAttempts 获取最大登录尝试次数
func GetMaxLoginAttempts() int {
	return ViperConfig.GetInt("auth.brute_force_protection.max_attempts")
}

// GetLoginWindowMinutes 获取登录失败窗口时间（分钟）
func GetLoginWindowMinutes() int {
	return ViperConfig.GetInt("auth.brute_force_protection.window_minutes")
}

// GetBlockDurationMinutes 获取IP封禁时长（分钟）
func GetBlockDurationMinutes() int {
	return ViperConfig.GetInt("auth.brute_force_protection.block_duration_minutes")
}

// GetCleanupHours 获取清理旧记录的时间间隔（小时）
func GetCleanupHours() int {
	return ViperConfig.GetInt("auth.brute_force_protection.cleanup_hours")
}
